package api

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"gvb-server/Request"
	"gvb-server/logic"
	"gvb-server/utils"
)

var MenuLogic = logic.LogicGroup.MenuLogic

// Menu 菜单列表
// @Tags 菜单管理
// @Summary 菜单列表
// @Description 菜单列表
// @Param data query Request.AdvertRequest false "查询参数"
// @Produce application/json
// @Router /api/menu [get]
// @Success 200 {object} utils.Response{data=utils.RList[models.Menu]}	// 嵌套返回列表 注意范式结构体
func (m Menu) Menu(c *gin.Context) {
	var s Request.MenuRequest
	err := c.ShouldBindQuery(&s)

	if err != nil {
		utils.Fail("", "参数错误", c)
	}

	if s.Page == 0 {
		s.Page = utils.Page
	}
	if s.Size == 0 {
		s.Size = utils.Size
	}

	uRs, err := MenuLogic.GetMenuList(s)

	if err != nil {
		utils.Fail("", "查询错误", c)
		return
	}
	fmt.Printf("uRs: %#v\n", uRs)

	utils.Success(uRs, "", c)
}

// MenuName 菜单选择列表
// @Tags 菜单管理
// @Summary 菜单选择列表
// @Description 菜单选择列表
// @Produce application/json
// @Router /api/menu_name [get]
// @Success 200 {object} utils.Response{data=utils.RList[models.Menu]}	// 嵌套返回列表 注意范式结构体
func (m Menu) MenuName(c *gin.Context) {
	uRs := MenuLogic.GetMenuNameList()

	if uRs.Code != utils.SUCCESS {
		utils.Fail("", "查询错误", c)
		return
	}
	utils.Success(uRs, "", c)
}

// MenuCreate 新增
// @Tags 菜单管理
// @Summary 新增
// @Description 新增
// @Param data body Request.MenuCreateRequest true "多参数"
// @Produce application/json
// @Router /api/menu [post]
// @Success 200 {object} utils.Response{}
func (m Menu) MenuCreate(c *gin.Context) {
	var s Request.MenuCreateRequest
	err := c.ShouldBindJSON(&s)
	if err != nil {
		msg := utils.GetValidMsg(err, &s)
		utils.Fail("", msg, c)
		return
	}
	uRs := MenuLogic.CreateMenu(s)

	if uRs.Status == utils.ERROR {
		utils.Success("", uRs.Msg, c)
		return
	}
	utils.Success("", uRs.Msg, c)
}

// MenuDel 菜单批量删除
// @Tags 菜单管理
// @Summary 菜单
// @Description 菜单
// @Param data body Request.MenuDelRequest true "ID必须"
// @Produce application/json
// @Router /api/menu [DELETE]
// @Success 200 {object} utils.Response{}
func (m Menu) MenuDel(c *gin.Context) {
	var s Request.MenuDelRequest
	err := c.ShouldBindJSON(&s)

	if err != nil {
		msg := utils.GetValidMsg(err, &s)
		utils.Fail("", msg, c)
		return
	}

	uRs := MenuLogic.DelMenu(s)
	if uRs.Status == utils.ERROR {
		utils.Success("", uRs.Msg, c)
		return
	}

	utils.Success("", uRs.Msg, c)
}

// MenuEdit 菜单修改
// @Tags 菜单管理
// @Summary 菜单
// @Description 菜单
// @Param data body Request.MenuEditRequest true "参数必须"
// @Produce application/json
// @Router /api/menu [put]
// @Success 200 {object} utils.Response{}
func (m Menu) MenuEdit(c *gin.Context) {
	var s Request.MenuCreateRequest
	err := c.ShouldBindJSON(&s)

	fmt.Println(s)
	if err != nil {
		msg := utils.GetValidMsg(err, &s)
		utils.Fail("", msg, c)
		return
	}

	uRs := MenuLogic.UpdateMenu(s)
	if uRs.Status == utils.ERROR {
		utils.Success("", uRs.Msg, c)
		return
	}
	utils.Success("", uRs.Msg, c)
}
